
#ifndef L4_D202503_H
#define L4_D202503_H
#include <iostream>
using namespace std;

/** Q1 两枚硬币
 *
 * 输入：
 *
 * 输出：
 *
 * 解题思路：
 *
 */
void Q1() {
  // 接收输入
  int n, m, v1 = 0, v2;
  cin >> n >> m;
  int coins[n];
  for (int i = 0; i < n; i++) {
    cin >> coins[i];
  }
  // 双重循环（暴力解法）
  for (int i = 0; i < n - 1; i++) {
    // i+1 避免重复
    for (int j = i + 1; j < n; j++) {
      // 当前的两颗硬币满足要求
      // v1 为 0 时，直接赋值
      // v1 != 0 时，判断当前配对硬币是否有小于v1的
      if ((coins[i] + coins[j] == m) && (v1 == 0 || coins[i] < v1 || coins[j] < v1)) {
        // 将较小值赋给v1，较大值赋给v2
        coins[i] <= coins[j] ? (v1 = coins[i], v2 = coins[j]) : (v1 = coins[j], v2 = coins[i]);
      }
    }
  }
  if (v1 == 0) {
    cout << "No Solution" << endl;
  } else {
    cout << v1 << " " << v2 << endl;
  }
  // 双指针 + 排序
  // 哈希表
}

/** Q2 完美数列：M <= m*p
 *
 * 输入：
 *
 * 输出：
 *
 * 解题思路：
 *
 */
void Q2() {
  int M = 1, m = 1, temp = 1, count = 0, p, n;
  cin >> n >> p;
  for (int i = 0; i < n; i++) {
    cin >> temp;
    if (temp <= m && M <= temp * p) {
      m = temp;
      count++;
    } else if (temp > m && temp < M) {
      count++;
    } else if (temp >= M && temp <= m * p) {
      M = temp;
      count++;
    }
    // cout << m << M << temp << count << endl;
  }
  cout << count << endl;
}

/** Q3 多样解码
 *
 * 输入：
 *
 * 输出：
 *
 * 解题思路：
 *
 */

// 判断是否为字母
bool isLetter(int n) {
  return n >= 0 && n <= 25;
}

// 计算数字长度
int getNumLen(int n) {
  if (n == 0) return 1;
  int len = 0;
  while (n != 0) {
    n /= 10;
    len++;
  }
  return len;
}

// 解码数字 递归
int decodeNum(int n) {
  int len = getNumLen(n);
  if (len == 1) {
    return 1;
  }
  if (len == 2) {
    return isLetter(n) ? 2 : 1;
  }
  int t = n % 100;
  t = (decodeNum(n / 10) + (t >= 10 && isLetter(t) ? decodeNum(n / 100) : 0)) % 1000000007;
  return t;
}
void Q3() {
  int n;
  cin >> n;
  cout << decodeNum(n) << endl;
}

/** Q4 二进制串的评分
 * 输入：
 *
 * 输出：
 *
 * 解题思路：
 *
 */

// 评价串的分数
int getScore(string s) {
  int i = 0, len = 1, score = -1;
  char flag = '0';
  while (i < s.size()) {
    if (s[i] == flag) {
      len++;
    } else {
      score == -1 ? score = len : score ^= len;
      flag = s[i];
      len = 1;
    }
    i++;
  }
  return score;
}

// int resolve(string s) {
//   int len = s.size();
//   if (len == 1)
// }

void Q4() {
  // "10001100001"
  // 输入：二进制串
  string s;
  cin >> s;
  // cout << getScore(s) << endl;
  // 输出：分数相同在一行，串的分数、同分不同串个数、得到该评分最小步数
}
#endif